// 这个文件会帮我们打包 packages 下的模块， 最终打包出js文件


// node scripts/dev.js (reactivity -f esm) === argv

import minimist from "minimist";  //解析参数的依赖工具
import { resolve, dirname } from 'path'
import { fileURLToPath } from "url";
import { createRequire } from "module";

import esbuild from 'esbuild'


// node中的命令行参数通过process获取
const args = minimist(process.argv.slice(2))
console.log(args);

// 获取文件的绝对路径
// esm使用commonjs变量
const __filename = fileURLToPath(import.meta.url) //以file开头，需要将其变为/开头路径
const __dirname = dirname(__filename)
console.log(__filename, __dirname);

const require = createRequire(import.meta.url)

const target = args._[0] || 'reactivity' // 打包哪个项目
const format = args.f || args.format || 'iife' // 打包成什么格式(打包的模块规范)
console.log(target, format);

// node中esm模块没有 __dirname
// const ectry = resolve(__dirname, `../packages/${target}/src/index.ts`)

// 入口文件  根据命令行提供的路径来进行解析
const entry = resolve(__dirname, `../packages/${target}/src/index.ts`)
/* __dirname获取当前文件路径 ，第二个参数是相对于当前文件路径的指向 Index.ts 入口文件*/
const pkg = require(`../packages/${target}/package.json`)

// 根据需要进行打包
esbuild.context({
    entryPoints: [entry],
    outfile: resolve(__dirname, `../packages/${target}/dist/${target}.js`), //出口
    bundle: true, // reactivity -> shared 会打包到一起
    platform: "browser", // 打包后给浏览器使用
    sourcemap: true, //可以调试源代码
    format: format, //cjs esm iife
    globalName: pkg.buildOptions?.name
}).then((ctx) => {
    console.log("start dev");

    return ctx.watch()

})

